package cn.wolfcode.service;

import cn.wolfcode.domain.Employee;
import cn.wolfcode.qo.EmployeeQueryObject;
import com.github.pagehelper.PageInfo;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 员工业务层
 *
 * @author 杨兴健
 * @Date 2020/7/8 9:31
 */
public interface EmployeeService {

    /**
     * 根据条件查询员工信息并封装为ResultSet对象
     *
     * @param qo
     * @return
     */
    PageInfo<Employee> selectAllByQO(EmployeeQueryObject qo);

    /**
     * 根据id删除员工
     *
     * @param id
     */
    void delete(Long id);

    /**
     * 根据id查询员工
     *
     * @param id
     * @return
     */
    Employee selectById(Long id);

    /**
     * 更新员工信息
     *
     * @param employee
     */
    void update(Employee employee);

    /**
     * 添加员工
     *
     * @param employee
     */
    void insert(Employee employee);

    /**
     * 添加员工与角色的关联关系
     *
     * @param eid
     * @param rid
     */
    void insertRelation(Long eid, Long rid);

    /**
     * 删除员工与角色的关联关系
     *
     * @param eid
     */
    void deleteRelation(Long eid);


    /**
     * 获取用户的所有权限表达式
     *
     * @param eid
     * @return
     */
    List<String> getExpressions(Long eid);

    /**
     * 更新密码
     *
     * @param oldPassword
     * @param newPassword
     */
    void updatePwd(String oldPassword, String newPassword);

    /**
     * 更新或新增用户
     *
     * @param employee
     * @param rids
     */
    void saveOrUpdate(Employee employee, Long[] rids);

    /**
     * 更新用户状态
     *
     * @param id
     */
    void changeStatus(Long id);

    /**
     * 检查用户名是否存在
     *
     * @param id
     * @param name
     * @return
     */
    boolean checkName(Long id, String name);

    /**
     * 批量删除
     *
     * @param ids
     */
    void batchDelete(Long[] ids);


    /**
     * 批量导入
     *
     * @param file
     */
    void importXls(MultipartFile file) throws IOException;

    /**
     * 批量导出数据
     *
     * @return
     */
    HSSFWorkbook exportXls();

    /**
     * 重置密码
     *
     * @param id
     * @param newPassword
     */
    void resetPwd(Long id, String newPassword);

    /**
     * 查询所有员工
     *
     * @return
     */
    List<Employee> selectAll();

    List<Employee> selectByRoleSn(String... sns);
}
